package com.huiyeji.retry;

/**
 * @author zhaoduo
 */

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 异常重试
 * @author zhaoduo
 * @tip 使用前请在主启动类扫描包【com.cmes.immp.aop】
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Retryable {

    /**
     * 重试次数
     * @return
     */
    int value() default 3;

    /**
     * 重试次数参数名
     * @tip 用于动态传入重试次数
     * @return
     */
    String paramName() default "";

    /**
     * 对指定异常进行重试
     * @return
     */
    Class<? extends Throwable> retryFor() default RetryableException.class;

    /**
     * 重试间隔毫秒
     * @return
     */
    long delay() default 100; // in milliseconds
}
